package com.eshop.eshopmanagersystem.dal;

import com.eshop.eshopmanagersystem.idal.IOrderDAL;
import com.eshop.eshopmanagersystem.model.OrderBarcodesRelationshipInfo;
import com.eshop.eshopmanagersystem.model.OrderInfo;
import com.eshop.eshopmanagersystem.model.UserInfo;
import com.eshop.eshopmanagersystem.unti.Pager;
import com.eshop.eshopmanagersystem.unti.PagerData;
import org.apache.ibatis.annotations.Delete;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import sun.rmi.server.InactiveGroupException;

import java.util.List;

/**
 * 订单接口功能实现层
 * 包括封装方法
 *
 */
@Service
public class OrderDAL {

    @Autowired
    IOrderDAL iOrderDAL;

    /**
     * 后台查询订单分页
     * 参数1：startIndex
     * 参数2：pageSize
     */
    private List<OrderInfo> getOrderByPager(Pager pager){
        Integer currentPage = pager.getCurrentPage();
        Integer startIndex = (currentPage-1)*pager.getPageSize();
        pager.setStartIndex(startIndex);
        return iOrderDAL.getOrderByPager(pager);
    }

    /**
     * 后台查询订单分页数据封装方法
     * 计算产品分页
     * 返回 pageTotal
     */
    private Integer getPageTotal(Pager pager){
        Integer orderTotalNumber = getOrderTotalNum();
        Integer pageTotal =1;
        //数据总条数除以pageSize，如果有余数也不能整除，页数+1
        //可以整除，页数=数据总条/pageSize
        pageTotal = orderTotalNumber/pager.getPageSize();
        if(orderTotalNumber%pager.getPageSize()>0){
            pageTotal=pageTotal+1;
        }
        return pageTotal;
    }

    /**
     * 封装分页数据提供前台调用
     */
    public PagerData getOrderDataByPager(Pager pager){
        //调用工具栏存储分页数据信息
        PagerData pagerData = new PagerData();
        pagerData.setData(getOrderByPager(pager));
        pagerData.setPageTotal(getPageTotal(pager));
        return pagerData;
    }

    /**
     * 后台查询订单分页数据总条数
     */
    private Integer getOrderTotalNum(){
        return iOrderDAL.getOrderTotalNum();
    }

    /**  *********** 以下是带搜索功能的分页方法 ************
     * 带条件查询的订单分页功能
     * 关键字 @order_code @startIndex @pageSize
     * 返回 查询结果
     */
    private List<OrderInfo> getOrderByPagerAndOrderCode(Pager pager){
        Integer currentPage = pager.getCurrentPage();
        Integer startIndex = (currentPage-1)*pager.getPageSize();
        pager.setStartIndex(startIndex);
        return iOrderDAL.getOrderByPagerAndOrderCode(pager);
    }

    /**
     * 带条件查询的订单分页数据总条数
     * 关键字 @order_code     *
     */
    private Integer getOrderTotalNumByOrderCode(Pager pager){
        return iOrderDAL.getOrderTotalNumByOrderCode(pager);
    }

    /**
     * 后台订单带搜索条件 计算分页页数
     */
    private Integer getPageTotalByOrderCode(Pager pager){
        Integer orderTotalNumber = getOrderTotalNumByOrderCode(pager);
        Integer pageTotal = 1;
        //数据总条数除以pageSize，如果有余数也不能整除，页数+1
        //可以整除，页数=数据总条/pageSize
        pageTotal = orderTotalNumber/pager.getPageSize();
        if(orderTotalNumber%pager.getPageSize()>0){
            pageTotal = pageTotal +1 ;
        }
        return pageTotal;
    }

    /**
     * 后台带条件查询的订单分页数据封装方法
     * 提供前台调用
     */
    public PagerData getOrderDataByPagerAndOrderCode(Pager pager){
        //调用封装的好方法进行数据装载
        PagerData pagerdata=new PagerData();
        pagerdata.setData(getOrderByPagerAndOrderCode(pager));
        pagerdata.setPageTotal(getPageTotalByOrderCode(pager));
        return pagerdata;
    }

    /****************************
    /**
     * 订单分页的order_id查询订单和产品关系
     */
    public List<OrderBarcodesRelationshipInfo> getOrderDetailsByOrderID(OrderInfo orderInfo){
        return iOrderDAL.getOrderDetailsByOrderID(orderInfo);
    }

    /**
     * 订单管理
     * 删除订单关系表
     */
    public boolean deleteOrderAndProductRelatonShip(OrderInfo orderInfo){
        if(iOrderDAL.deleteOrderAndProductRelatonShip(orderInfo)>0){
            return true;
        }
        return false;
    }

    /**
     *  订单管理
     *  批量删除订单
     *  参数：id的集合
     */
    public boolean deleteOrder(OrderInfo orderInfo){
        if(iOrderDAL.deleteOrder(orderInfo)>0){
            return deleteOrderAndProductRelatonShip(orderInfo);
        }
        return false;
    }

}
